main(){
  //1.定义一个数据源，只能存储字符串

  var dataSource = MyData<String>();
  //2.调用方法，只能添加string类型数据
  dataSource.addData('111');
  dataSource.addData('222');
  dataSource.addData('333');
  print(dataSource.totalCount());

  //3.调用方法，只能获取string类型数据
  var res=dataSource.getData(1);
  print(res);


}

//抽象类
abstract class MyDataSource<T>{
  int totalCount();
  dynamic getData(int index);

}

// 实现抽象接口类
class MyDataSourceImpl<T> implements MyDataSource<T>{
//私有的，避免被直接修改，通过泛型约束数据类型
List<T> _dataArray = [];

@override
  getData(int index) {
    return _dataArray[index];

  }
  @override
  int totalCount() {
    return _dataArray.length;
  }
}


class MyData<T>{

  List<T> _dataArray = [];
  
  int totalCount(){
    return _dataArray.length;

  }
  T getData(int index){
    return _dataArray[index];
  }
  void addData(T data){
    _dataArray.add(data);
  }
}